﻿#include "tableview.h"
#include <QPainter>
#include <QStyledItemDelegate>

TableView::TableView(QWidget *parent)
    : QTableView(parent), gridLineColor(Qt::black), alternatingColor1(QColor("#ff5722")),
      alternatingColor2(QColor("#ffb800"))
{
    // 设置边框透明
    setFrameShape(QFrame::NoFrame);

    // 设置圆角
    setStyleSheet("QTableView { border-radius: 5px; }"); // 仅圆角使用 QSS，其他功能用 API

    // 设置背景颜色
    QPalette palette = this->palette();
    palette.setColor(QPalette::Base, QColor("#fafafa")); // 背景颜色
    setPalette(palette);

    // 设置字体
    QFont font("Arial", 12);
    setFont(font);

    // 设置字体颜色
    palette.setColor(QPalette::Text, QColor("#ffffff")); // 字体颜色
    setPalette(palette);

    // 设置隔行颜色
    setAlternatingRowColors(alternatingColor1, alternatingColor2);

    // 设置网格线颜色
    setGridLineColor(Qt::lightGray);

    // 显示垂直和水平表头
    verticalHeader()->setVisible(true);
    horizontalHeader()->setVisible(true);

    // 设置表头样式
    setHeaderStyle(Qt::Vertical, QColor("#1e9fff"), QColor("#ffffff"));
    setHeaderStyle(Qt::Horizontal, QColor("#31bdec"), QColor("#ffffff"));

    // 禁用角落按钮
    setCornerButtonEnabled(false);
}

void TableView::setAlternatingRowColors(const QColor &color1, const QColor &color2)
{
    alternatingColor1 = color1;
    alternatingColor2 = color2;

    QPalette palette = this->palette();
    palette.setColor(QPalette::AlternateBase, color1); // 隔行颜色
    palette.setColor(QPalette::Base, color2); // 默认行颜色
    setPalette(palette);

    // 启用隔行颜色
    QTableView::setAlternatingRowColors(true);
}

void TableView::setGridLineColor(const QColor &color)
{
    gridLineColor = color;
    viewport()->update(); // 触发重绘
}

void TableView::setHeaderStyle(Qt::Orientation orientation, const QColor &backgroundColor, const QColor &textColor)
{
    QHeaderView *header = (orientation == Qt::Vertical) ? verticalHeader() : horizontalHeader();

    QPalette palette = header->palette();
    palette.setColor(QPalette::Button, backgroundColor); // 表头背景颜色
    palette.setColor(QPalette::ButtonText, textColor);   // 表头文字颜色
    header->setPalette(palette);

    header->setDefaultAlignment(Qt::AlignCenter); // 表头文字居中
}

void TableView::setCornerButtonEnabled(bool enabled)
{
    QTableView::setCornerButtonEnabled(enabled); // 调用父类的方法
}

void TableView::paintEvent(QPaintEvent *event)
{
    QTableView::paintEvent(event);

    // 绘制网格线
    if (showGrid()) {
        QPainter painter(viewport());
        painter.setPen(gridLineColor);

        for (int row = 0; row < model()->rowCount(); ++row) {
            for (int col = 0; col < model()->columnCount(); ++col) {
                QRect rect = visualRect(model()->index(row, col));
                painter.drawRect(rect);
            }
        }
    }
}
